#pragma once
#include "CoreMinimal.h"
#define MONTH_WEEK 6 //每个月最大的周
#define WEEK_DAY 7//每个周有几天

class SButton;
struct FDateTime;
DECLARE_DELEGATE_ThreeParams(FOnDateChanged,  int,int,int);

//日历控件
class SCalendarWidget : public SCompoundWidget
{
public:
	SLATE_BEGIN_ARGS(SCalendarWidget)
		:_InAstrictDate(0)
		,_OndateChanged()
	{}
	SLATE_ARGUMENT(time_t *, InDateTime)
		SLATE_EVENT(FOnDateChanged, OndateChanged)//日期改变时的通知事件
		SLATE_ARGUMENT(time_t *, InAstrictDate)////限制时间,SLATE_ATTRIBUTE是可以使用lambda模式的,在这里需要动态更新此参数
	SLATE_END_ARGS()
//
//		/** Constructs this widget with InArgs */
	void Construct(const FArguments& InArgs);
	//初始化按钮矩阵
	void InitButtons();
	//根据当前的年和月来更新按钮的数据
	void UpdataButtonsState();
	FReply ButtonClick();
	public:
	FOnDateChanged OndateChanged;
	uint16 Year;
	uint16 Month;
	time_t *AstrictDate;//要限制的时间
	time_t *DateTime;//当前的时间
	TSharedPtr<SButton> BtnDay[MONTH_WEEK][WEEK_DAY];//日期矩阵
	TSharedPtr<STextBlock> TextBlocks[MONTH_WEEK][WEEK_DAY];//按钮的字体不能更改,所以将textblock嵌入到按钮中
};